home *** CD-ROM | disk | FTP | other *** search
/ Apple II Magazines (PO) / Nibble Volume 09, No. 07 (1988-07)(MicroSPARC)(Side A).zip / Nibble Volume 09, No. 07 (1988-07)(MicroSPARC)(Side A).po / NEWSMAKER.S < prev    next >
Text File  |  1996-12-24  |  21KB  |  813 lines

  1. ********************************
  2. *     NewsMaker
  3. *     by John J. Gwynn
  4. *     Copyright (c) 1988
  5. *     by MicroSPARC, Inc.
  6. *     Concord, MA 01742
  7. *     Merlin Pro Assembler
  8. ********************************
  9. *
  10. *---Monitor-----------------------
  11. *
  12. HOME      EQU $FC58      ;applesoft home
  13. COUT      EQU $FDED      ;monitor char output
  14. CROUT     EQU $FD8E      ;<cr> out
  15. GETLN     EQU $FD6A      ;monitor string input
  16. RDKEY     EQU $FD0C      ;monitor key input
  17. STROUT    EQU $DB3A      ;applesoft string print
  18. VTAB      EQU $FC22      ;cursor vtab
  19. KEYBD     EQU $C000      ;keyboard read
  20. STROBE    EQU $C010      ;reset keyboard read
  21. *
  22. *---ProDOS-------------------------
  23. *
  24. MLI       EQU $BF00      ;MLI entry
  25. LEVEL     EQU $BF94      ;level of access for MLI
  26. BITMAP    EQU $BF58      ;ProDOS Global Page bit map
  27. DOSCMD    EQU $BE03      ;vector for command processing
  28. BADCALL   EQU $BE8B      ;convert mli error to basic.sys
  29. PRINTERR  EQU $BE0C      ;print system error
  30. *
  31. *---Page Zero----------------------
  32. *
  33. PAGE      EQU $00
  34. PROMPT    EQU $33        ;location of prompt char
  35. TXTLFT    EQU $20        ;left margin of text window
  36. CH        EQU $24        ;cursor horizontal
  37. CV        EQU $25        ;cursor veritcal
  38. CSW       EQU  $36       ;output vector
  39. MAXCHAR   EQU $EF        ;total chars per column
  40. FILEPTR   EQU $FA        ;pointer to active buffer
  41. ENDTEST   EQU $D7        ;holds end of file flag
  42. WORDNUM   EQU $E3        ;holds # of chars read
  43. BUF1PTR   EQU $19        ;pointer to column 1 buffer
  44. BUF2PTR   EQU $1B        ;pointer to column 2 buffer
  45. *
  46. *---Buffers------------------------
  47. *
  48. LINEBUF   EQU $300       ;holds current line buffer
  49. PATHNAME  EQU $2B0       ;location of pathname
  50. INBUF     EQU $200       ;getln input buffer
  51. BUFFER1   EQU $1000      ;first read to newline
  52. *
  53.           ORG $803
  54.           JMP START
  55. *
  56. LFT       DFB 5          ;left margin
  57. C2        DFB 41         ;start of column2
  58. MAX       DFB 35         ;max column width
  59. *
  60. START     CLD            ;set to binary mode
  61.           JSR CLEAR      ;prepare RAM & bitmap
  62. MENU      LDA #$15       ;<ctrl>-U 80 col off
  63.           JSR COUT '40 column only
  64.           JSR HOME
  65.           LDY #$02
  66.           STY TXTLFT     ;set left margin of display
  67.           STY CV         ;vtab 2
  68.           JSR VTAB
  69.           LDA #$06
  70.           STA CH         ;htab 6
  71.           LDA #TITLE1    ;print title screen
  72.           LDY #/TITLE1
  73.           JSR STROUT
  74.           LDA #$08
  75.           STA CH         ;htab 8
  76.           LDA #TITLE2
  77.           LDY #/TITLE2
  78.           JSR STROUT
  79.           JSR CROUT
  80.           LDA #$0C
  81.           STA CH         ;htab 12
  82.           LDA #TITLE3
  83.           LDY #/TITLE3
  84.           JSR STROUT
  85.           LDA #$08
  86.           STA TXTLFT     ;left margin 8
  87.           JSR CROUT
  88.           LDY #$14       ;20 "_"s
  89. :M1       LDA #$AD
  90.           JSR COUT
  91.           DEY
  92.           BNE :M1
  93.           JSR CROUT
  94.           JSR CROUT
  95.           LDA #CHOICE1   ;print menu choices
  96.           LDY #/CHOICE1
  97.           JSR STROUT
  98.           JSR CROUT
  99.           LDA #CHOICE2
  100.           LDY #/CHOICE2
  101.           JSR STROUT
  102.           JSR CROUT
  103.           LDA #CHOICE3
  104.           LDY #/CHOICE3
  105.           JSR STROUT
  106.           LDA #0
  107.           STA PATHNAME   ;set to null string
  108.           STA TXTLFT     ;reset left margin
  109.           STA CH         ;htab 0
  110.           LDA #$17
  111.           STA CV
  112.           JSR VTAB       ;vtab 23
  113.           LDA #CHOICE4   ;low
  114.           LDY #/CHOICE4  ;high
  115.           JSR STROUT
  116. *
  117. SELECT    JSR RDKEY      ;get a choice
  118.           CMP #$B1       ;1?
  119.           BEQ :S1
  120.           CMP #$B2       ;2?
  121.           BEQ :S2
  122.           CMP #$B3
  123.           BEQ :S4
  124.           LDA #$87
  125.           JSR COUT       ;ring bell on error
  126.           BNE SELECT
  127. :S1       JSR HOME       ;load text file
  128.           JSR CLEAR
  129.           JSR LOAD
  130.           JSR PAUSE      ;wait for keypress
  131.           JMP MENU       ;return to menu
  132. :S2       LDA BUFFER1+1  ;is there text in RAM?
  133.           BEQ :S3        ;no-try again
  134.           JSR DEST       ;print the file
  135.           JSR CROUT
  136.           JSR CROUT
  137.           JSR PAUSE      ;wait for keypress
  138. :S3       JMP MENU       ;to menu
  139. :S4       JSR HOME
  140.           JMP QUIT       ;exit program
  141. *
  142. PAUSE     LDA #$17       ;23
  143.           STA CV
  144.           JSR VTAB       ;vtab 23
  145.           LDA #0
  146.           STA CH
  147.           LDA #WAIT1
  148.           LDY #/WAIT1
  149.           JSR STROUT
  150. :1        STA STROBE     ;pause for return
  151.           JSR RDKEY
  152.           STA STROBE
  153.           RTS
  154. *
  155. CLEAR     LDA #$10       ;Start at $1000 and zero
  156.           STA PAGE+1     ;out from page $10 to
  157.           LDA #$00       ;page $96 text file memory range
  158.           STA PAGE
  159.           TAY
  160.           LDA #00
  161. :C1       STA (PAGE),Y
  162.           INY
  163.           BNE :C1
  164.           INC PAGE+1
  165.           LDX PAGE+1
  166.           CPX #$96
  167.           BCC :C1
  168.           STA EOF
  169.           STA EOF+1      ;set eof parmameter
  170.           LDX #$03
  171. :C2       STA BITMAP,X
  172.           INX
  173.           CPX #$13
  174.           BCC :C2        ;restore bitmap
  175.           LDA #$3F
  176.           STA BITMAP,X   ;zero pages $10-$96
  177.           RTS
  178. *
  179. LOAD      JSR PATH       ;get pathname
  180.           BCS LOAD-1     ;return to try again
  181.           JSR GET_ATTR   ;get file type
  182.           BCS :L2        ;error
  183.           LDA FTYPE
  184.           CMP #4         ;TXT FILE?
  185.           BNE FTYPERR    ;no, error
  186.           JSR OPEN       ;MLI call
  187.           BCS :L2        ;error?
  188.           LDA REFNUM
  189.           STA REF1
  190.           STA REF2
  191.           STA REF3       ;init reference numbers
  192.           STA REF4
  193.           JSR GETEOF     ;get file length
  194.           BCS :L1
  195.           LDA EOF
  196.           STA RDEOF
  197.           LDA EOF+1
  198.           STA RDEOF+1    ;set nuber of bytes to read
  199.           JSR NEWLINE    ;Set newline char
  200.           BCS :L1
  201.           JSR READ       ;Read both buffers
  202.           JSR HOME
  203.           LDA #TEXTOK    ;no errors
  204.           LDY #/TEXTOK
  205.           JSR STROUT
  206.           JMP CLOSE
  207. :L1       JSR CLOSE
  208. :L2       JMP ERROR
  209. FTYPERR   JSR CLOSE      ;wrong filetype selected
  210.           JSR HOME
  211.           LDA #$87
  212.           JSR COUT
  213.           LDA #1
  214.           JSR VTAB
  215.           LDA #FTERRL
  216.           LDY #/FTERRL
  217.           JSR STROUT
  218.           JSR PAUSE
  219.           PLA
  220.           PLA
  221.           JMP MENU
  222. *
  223. PATH      JSR CROUT
  224.           JSR CROUT      ;scroll 2 lines
  225.           LDA #0
  226.           STA VOLFLAG    ;signal the file request level
  227.           LDA #TEXT
  228.           LDY #/TEXT
  229.           JSR STROUT     ;print string
  230. *
  231. PATH2     LDA #$BA       ;":" prompt
  232.           STA PROMPT
  233.           JSR GETLN      ;get pathname
  234.           CPX #1
  235.           BCC :P2
  236.           LDA INBUF
  237.           CMP #"?"       ;CAT requested?
  238.           BEQ :P4
  239.           STX PATHNAME   ;store length in first byte
  240.           LDY #$FF
  241. :P1       INY
  242.           LDA INBUF,Y    ;get pathname and store it
  243.           STA PATHNAME+1,Y
  244.           CMP #$8D
  245.           BNE :P1
  246.           LDA #0         ;make ret a 0
  247.           INY            ;
  248.           STA PATHNAME,Y
  249.           CLC
  250.           RTS            ;from PATH
  251. :P2       LDA VOLFLAG    ;processing a volume request?
  252.           BNE :P3
  253.           PLA
  254.           PLA
  255.           PLA
  256.           PLA
  257.           JMP MENU       ;
  258. :P3       SEC
  259.           RTS
  260. :P4       LDA VOLFLAG
  261.           BNE :P3        ;do not call CAT from CAT
  262.           JSR CAT
  263.           BNE PATH       ;always
  264. *
  265. DEST      JSR INIT
  266.           JSR HOME
  267.           LDA #$05       ;htab 5
  268.           STA CH
  269.           STA CV
  270.           JSR VTAB       ;vtab 5
  271.           LDA #WHERE1
  272.           LDY #/WHERE1
  273.           JSR STROUT
  274.           LDA #0
  275.           STA CH         ;htab 0
  276.           LDA #$16
  277.           STA CV
  278.           JSR VTAB       ;vtab 22
  279.           LDA #CHOICE4
  280.           LDY #/CHOICE4
  281.           JSR STROUT
  282. WHICH     JSR RDKEY
  283.           AND #$DF
  284.           CMP #$D0       ;"P"
  285.           BNE :W1
  286.           JMP PRINTER
  287. :W1       CMP #$D3       ;"S"
  288.           BNE :W2
  289.           JMP SCREEN
  290. :W2       CMP #$C4       ;"D"
  291.           BNE WHICH
  292.           JMP DISK
  293. *
  294. CAT       JSR HOME
  295.           LDA #PROMPT3
  296.           STA VOLFLAG    ;signal volume name level
  297.           LDY #/PROMPT3
  298.           JSR STROUT
  299.           JSR PATH2      ;get requested prefix
  300.           BCS :C0        ;do CAT if no vol specified
  301.           JSR SETPREFIX  ;set for subsequent cataloging
  302.           BCS :C3
  303. :C0       LDY #0
  304. :C1       LDA COMMAND,Y
  305.           BEQ :C2
  306.           STA INBUF,Y
  307.           INY
  308.           BNE :C1
  309. :C2       JMP DOSCMD     ;call basic system to CAT
  310. :C3       JSR BADCALL
  311.           JMP PRINTERR
  312. :C4       RTS
  313. SCREEN    JSR HOME
  314.           LDA #0
  315.           STA CV
  316.           STA CH         ;reset to full screen
  317.            STA  TESTPRN  ;we are not printing
  318. SCREEN2   LDA CSW+1      ;output vector
  319.           PHA
  320.           LDA CSW        ;low byte is first off
  321.           PHA            ;push output vectors on stack
  322.           LDY #00
  323.           STY CSW        ; low byte
  324. PRNUM     LDA #$C3       ;CSW to 80 col firmware
  325.           STA CSW+1      ;high byte
  326. :P1       JSR FIRST
  327.           JSR PRINTBUF   ;using cout
  328.           LDA ENDTEST
  329.           CMP #$03       ;EOF?
  330.           BNE :P1        ;no do again
  331.           PLA            ;get low byte
  332.           STA CSW
  333.           PLA
  334.           STA CSW+1      ;restore hooks
  335.           RTS            ;from SCREEN
  336. *
  337. PRINTER   JSR HOME
  338.           LDA #WAIT2
  339.            STA  TESTPRN  ;yes we are printing
  340.           LDY #/WAIT2
  341.           JSR STROUT
  342.           LDA SLOT
  343.           STA PRNUM+1    ;set output to slot 1
  344.           BNE SCREEN2    ;always
  345. *
  346. INIT      LDA #$20
  347.           LDX #$4F       ;79. set length of line here
  348.           STX MAXLINE    ;holds length of line
  349.           INX
  350.           STX MAXLINE+1  ;for printer routine
  351.           STX MAXWRITE   ;for disk write
  352. :1        STA LINEBUF,X  ;fill line buffer with spaces
  353.           DEX
  354.           BPL :1
  355.           LDA #0
  356.           STA BUF1PTR
  357.           STA BUF2PTR    ;initialize pointers
  358.           STA ENDTEST    ;initialize EOF flag
  359.           LDA #$10
  360.           STA BUF1PTR+1  ;buf1 = $1000
  361.           LDA #$60       ;buf2 = $6000
  362.           STA BUF2PTR+1
  363.           LDA MAX        ;set length of line here
  364.           STA MAXCHAR    ;max line is 35 chars each
  365.           LDX C2         ;
  366.           STX COL2       ;set start of col2 here
  367.           DEX
  368.           STX COL1       ;set end of COL1 < COL2
  369.           LDA LFT
  370.           STA LEFTMAR    ;set left margin here
  371.           LDA #$C3       ;set output to 80 column firmware
  372.           STA PRNUM+1    ;for printing routine
  373.           RTS            ;from INIT
  374. *
  375. FIRST     LDA BUF1PTR
  376.           STA FILEPTR
  377.           LDA BUF1PTR+1
  378.           STA FILEPTR+1  ;set up fileptr to buffer1
  379.           LDX #0         ;set to first point on linebuf
  380.           LDA ENDTEST
  381.           CMP #$01       ;EOF buffer?
  382.           BEQ NOMORE     ;yes
  383.           LDA LEFTMAR    ;no
  384.           BNE ADDMAR     ;indent?
  385. *
  386. FILLINE   JSR GETCHAR
  387.           CPX COL2       ;which buffer active?
  388.           BCS :F1
  389.           CLC
  390.           LDA WORDNUM    ;get offset returned by getchar
  391.           ADC BUF1PTR    ;update buf1pointer
  392.           STA BUF1PTR
  393.           BCC SECOND     ;get second column
  394.           INC BUF1PTR+1
  395.           BCS SECOND     ;always
  396. :F1       LDA WORDNUM    ;get number of chars used
  397.           CLC
  398.           ADC BUF2PTR    ;update buf2ptr
  399.           STA BUF2PTR
  400.           BCC S1
  401.           INC BUF2PTR+1
  402.           BNE S1
  403. SECOND    LDA BUF2PTR
  404.           STA FILEPTR
  405.           LDA BUF2PTR+1
  406.           STA FILEPTR+1  ;set to buffer2
  407.           LDX COL2       ;set to enter at start of col2
  408.           LDA ENDTEST
  409.           CMP #$02       ;EOF buffer2?
  410.           BCS NOMORE
  411.           BCC FILLINE    ;always
  412. S1        LDA #$0D
  413.           STA LINEBUF,X
  414.           RTS            ;from FIRST
  415. *
  416. NOMORE    JSR FILLSPC    ;fill rest of line with spaces
  417.           CPX COL2       ;which buffer is active?
  418.           BCC SECOND     ;first
  419.           BCS S1         ;from FIRST
  420. *
  421. ADDMAR    LDA #$20
  422. :AD1      STA LINEBUF,X  ;fill line with leading spaces
  423.           INX
  424.           CPX LEFTMAR    ;enough?
  425.           BCC :AD1
  426.           BCS FILLINE
  427. *
  428. FILLSPC   LDA #$20       ;space
  429. :F1       STA LINEBUF,X  ;fill remainder of column with spaces
  430.           INX
  431.           CPX COL1       ;column 1 finished?
  432.           BEQ :F2
  433.           CPX MAXLINE    ;column2 finished?
  434.           BCC :F1
  435. :F2       RTS            ;from FILSPC
  436. *
  437. INDENT    TYA
  438.           PHA            ;save Y register
  439.           LDY #$03
  440.           LDA #$20
  441. :1        STA LINEBUF,X  ;store a space
  442.           INX
  443.           DEY
  444.           BNE :1         ;indent 3 spaces
  445.           PLA
  446.           TAY            ;restore Y register
  447.           JMP G2
  448.  
  449. *
  450. GTSPC     CPX LEFTMAR    ;leading space?
  451.           BEQ G2         ;yes, disregard
  452.           CPX COL2       ;leading space?
  453.           BEQ G2         ;ditto...
  454.           BNE G1         ;else return & print space
  455. *
  456. GETCHAR   LDY #0         ;Y holds buffer offset
  457. *
  458. CHLOOP    LDA (FILEPTR),Y
  459.           BEQ EOFND
  460.           CMP #$0D       ;carriage return?
  461.           BEQ RET        ;fill remainder w/ spaces
  462.           CMP #$20       ;leading space?
  463.           BEQ GTSPC
  464.           BCC G2         ;ignore <CTRL> chars
  465.           CMP #$5E       ;"^" char?
  466.           BEQ INDENT
  467.           CMP NEWCHAR    ;@ char?
  468.           BEQ G2         ;ignore...
  469. G1        STA LINEBUF,X  ;store in line buffer
  470.           INX            ; increment
  471. G2        INY
  472.           CPY MAXCHAR    ;Full 35 chars?
  473.           BCC CHLOOP
  474. TEST      CMP #$20       ;space?
  475.           BEQ OK
  476.           CMP #$2E       ;period?
  477.           BEQ OK
  478.           CMP #$2C       ;comma?
  479.           BEQ OK
  480.           DEY            ;ELSE decrement and find end
  481.           DEX
  482.           CPY #$08       ;are we going back too far?
  483.           BEQ TOOFAR     ;yes
  484.           LDA LINEBUF,X
  485.           BNE TEST       ;always
  486. *
  487. RET       INY            ;advance fileptr past <CR>
  488. OK        DEX            ;reset line pointer
  489. OK1       LDA #$20       ;space
  490. :O1       INX
  491.           STA LINEBUF,X
  492.           CPX COL1       ;finished?
  493.           BEQ FULL
  494.           CPX MAXLINE    ;finished?
  495.           BCS FULL
  496.           BNE :O1        ;always
  497. *
  498. EOFND     CPX COL2       ;which buffer are we in?
  499.           BCC :E1        ;buffer1
  500.           CLC
  501.           LDA #02
  502.           ADC ENDTEST
  503.           STA ENDTEST
  504.           BNE OK         ;add spaces if needed
  505. :E1       CLC
  506.           LDA #01
  507.           ADC ENDTEST
  508.           STA ENDTEST
  509.           BNE OK         ;ditto
  510. FULL      STY WORDNUM    ;save offset to add to pointer
  511.           RTS            ;from GETCHAR
  512. TOOFAR    LDA (FILEPTR),Y ;this section refills the buffer
  513.           STA LINEBUF,X  ;if we are going back too far
  514.           INX
  515.           INY
  516.           CPY MAXCHAR    ;full?
  517.           BCC TOOFAR
  518.           BCS OK1        ;when done
  519. *
  520. PRINTBUF  LDX #0         ;set offset
  521. :P1       LDA LINEBUF,X  ;get a character
  522.           ORA #$80       ;set high bit
  523.           JSR COUT       ;print it
  524.           INX            ;next
  525.           CPX MAXLINE+1  ;done?
  526.           BCC :P1        ;no
  527.           LDA KEYBD      ;key pressed?
  528.           CMP #$80
  529.           BCC :P3        ;no
  530.           BIT STROBE     ;yes
  531.           CMP #$9B       ;<esc>?
  532.           BEQ :P2
  533.            LDA  TESTPRN
  534.           BNE  :P3
  535.           JMP RDKEY      ;stop scroll
  536. :P2       LDA #3
  537.           STA ENDTEST
  538. :P3       RTS            ;from PRINTBUF
  539. *
  540. RETRY     JSR PAUSE
  541. DISK      JSR HOME
  542.           LDA #00
  543.           STA VOLFLAG    ;not a volume request
  544.           STA PATHNAME   ;remove previous input
  545.           LDA #PROMPT4
  546.           LDY #/PROMPT4
  547.           JSR STROUT
  548.           JSR PATH2      ;get pathname
  549.           BCS RETRY      ;if not successful
  550.           JSR HOME
  551.           LDA #PROMPT5
  552.           LDY #/PROMPT5
  553.           JSR STROUT
  554.           LDA #PATHNAME+1
  555.           LDY #/PATHNAME+1
  556.           JSR STROUT
  557.           JSR CREATE     ;create new text file
  558.           BCS :2
  559.           JSR OPEN       ;open file
  560.           BCS :2
  561.           LDA REFNUM     ;get reference number returned
  562.           STA REFWRT     ;set it to write call
  563.           STA REF4
  564. :1        JSR FIRST      ;fill line buff
  565.           JSR WRITE      ;write linebuf to disk
  566.           BCS :2
  567.           LDA ENDTEST
  568.           CMP #$03       ;EOF?
  569.           BNE :1
  570.           JMP CLOSE      ;return
  571. :2        JMP ERROR
  572. *
  573. QUIT      LDA #11
  574.           STA CV
  575.           JSR VTAB
  576.           LDA #PROMPT1
  577.           LDY #/PROMPT1
  578.           JSR STROUT
  579.           JSR RDKEY
  580.           CMP #$D9       ;"Y"?
  581.           BEQ :Q1
  582.           CMP #$F9       ;"y"?
  583.           BEQ :Q1
  584.           JMP MENU       ;no. return
  585. :Q1       JSR HOME       ;clear screen
  586.           LDA #"]"       ;restore ] prompt
  587.           STA PROMPT
  588.           LDA #23
  589.           STA CV
  590.           JSR VTAB       ;put cursor in bottom
  591.           LDA #0
  592.           STA $800
  593.           STA $800+1
  594.           STA $800+2
  595.           JSR $3D0       ;return to DOS
  596. *
  597. *     MLI Subroutines
  598. *
  599. OPEN      LDA #3
  600.           STA LEVEL      ;Set access level to 3
  601.           JSR MLI
  602.           DFB $C8        ;open file
  603.           DA PARM0       ;parameters
  604.           RTS
  605. *
  606. GETEOF    JSR MLI
  607.           DFB $D1        ;Get_EOF
  608.           DA PARM1
  609.           RTS
  610. *
  611. NEWLINE   JSR MLI
  612.           DFB $C9
  613.           DA PARM4
  614.           RTS
  615. *
  616. READ      LDA #00
  617.           STA BUFADDR
  618.           LDA #$10
  619.           STA BUFADDR+1  ;set to read buffer1
  620.           JSR MLI
  621.           DFB $CA        ;read first column
  622.           DA PARM2
  623.           BCS :R1
  624. *
  625.           LDA #$60
  626.           STA BUFADDR+1  ;reset for next read
  627.           LDA #0
  628.           STA BUFADDR
  629. *
  630.           JSR MLI
  631.           DFB $CA        ;read next column
  632.           DA PARM2
  633.           BCS :R1
  634.           RTS
  635. :R1       PLA
  636.           PLA
  637.           JMP ERROR
  638. *
  639. CLOSE     JSR MLI
  640.           DFB $CC        ;close file
  641.           DA PARM3
  642.           RTS
  643. *
  644. CREATE    JSR MLI
  645.           DFB $C0
  646.           DA PARM6
  647.           RTS
  648. *
  649. WRITE     JSR MLI
  650.           DFB $CB
  651.           DA PARM7
  652.           RTS
  653. *
  654. SETPREFIX JSR MLI
  655.           DFB $C6
  656.           DA PARM8
  657.           RTS
  658. GET_ATTR  JSR MLI
  659.           DFB $C4
  660.           DA PARM9
  661.           RTS
  662. *
  663. *
  664. ERROR     CMP #$40
  665.           BEQ ERR1
  666.           JSR BADCALL    ;convert MLI error to BI code
  667.           PHA
  668.           JSR HOME
  669.           PLA
  670.           JSR PRINTERR   ;let BI handle error
  671. RETURN    JSR PAUSE      ;read error msg
  672.           PLA
  673.           PLA            ;pull return address of stack
  674.           JMP MENU       ;and start over
  675. *
  676. ERR1      JSR HOME
  677.           LDA #ERRTEXT1
  678.           LDY #/ERRTEXT1
  679.           JSR STROUT
  680.           BEQ RETURN
  681.  
  682. *
  683. *   PARM TABLES
  684. *
  685. *---Open file parms-----------------
  686. *
  687. PARM0     DFB 3          ;# of parameters
  688.           DA PATHNAME
  689.           DA $9000
  690. REFNUM    DS 1           ;reference number
  691. *
  692. *---Get EOF parms------------------
  693. *
  694. PARM1     DFB 2          ;2 parms
  695. REF1      DFB 1          ;reference number
  696. EOF       DS 3
  697. *
  698. *---Read file parms----------------
  699. *
  700. PARM2     DFB 4          ;# of parameters
  701. REF2      DFB 1          ;reference number
  702. BUFADDR   DA BUFFER1     ;buffer pointer
  703. RDEOF     DW $0000       ;# of bytes to read
  704.           DS 2           ;number of bytes actually read
  705. *
  706. *---Close file parms---------------
  707. *
  708. PARM3     DFB 1
  709. REF4      DFB 1
  710. *
  711. *---Newline parms-------------------
  712. *
  713. PARM4     DFB 3
  714. REF3      DFB 1
  715.           DFB $7F        ;enable mask
  716. NEWCHAR   DFB $40        ;'@' newline char
  717. *
  718. *---Create parms--------------------
  719. *
  720. PARM6     DFB 7
  721.           DA PATHNAME
  722.           DFB $E3
  723.           DFB $04
  724.           DW 0
  725.           DFB 1
  726.           DW 0
  727.           DW 0
  728. *
  729. *---Write parms---------------------
  730. *
  731. PARM7     DFB $4
  732. REFWRT    DS 1
  733.           DA LINEBUF
  734. MAXWRITE  DS 2           ;number of bytes read
  735.           DS 2           ;number actually written
  736. *
  737. *---Set Prefix parms---------------
  738. *
  739. PARM8     DFB 1
  740.           DA PATHNAME
  741. *
  742. *-----Get_Attr parms---------------
  743. *
  744. PARM9     DFB #$A
  745.           DA PATHNAME
  746.           DS 1
  747. FTYPE     DS 1
  748.           DS 9
  749.  
  750. *---Variables----------------------
  751. *
  752. COL1      DS 1           ;start of first column
  753. COL2      DS 1           ;start of second column
  754. LEFTMAR   DS 1           ;left margin
  755. MAXLINE   DS 2           ;max # of chars per line
  756. SLOT      DFB $C1        ;high byte of printer slot
  757. VOLFLAG   DS 1           ;flag vol or path level of processing
  758. TESTPRN   DS 1
  759. *
  760. * Text strings
  761. *
  762. TEXT      ASC "ENTER FILENAME "
  763.           HEX 8D
  764.           ASC "OR ? FOR CAT"
  765.           DFB 00
  766. ERRTEXT1  HEX 8D8A07
  767.           ASC "INVALID PATHNAME "
  768.           DFB 00
  769. TEXTOK    HEX 8D8D
  770.           ASC "TEXT FILE SUCCESSFULLY LOADED"
  771.           DFB 0
  772. TITLE1    ASC "NEWSMAKER TEXT PRINTER"
  773.           HEX 8D00
  774. TITLE2    ASC "BY JOHN J. GWYNN"
  775.           HEX 8D
  776.           ASC "COPYRIGHT 1988 BY MICROSPARC, INC."
  777.           HEX 8D00
  778. TITLE3    ASC "MAIN MENU"
  779.           HEX 8D00
  780. CHOICE1   ASC "1. LOAD TEXT FILE"
  781.           HEX 8D00
  782. CHOICE2   ASC "2. PRINT TEXT FILE"
  783.           HEX 8D00
  784. CHOICE3   ASC "3. QUIT"
  785.           DFB 0
  786. CHOICE4   ASC "ENTER CHOICE => "
  787.           DFB 0
  788. WAIT1     ASC "PRESS RETURN TO CONTINUE..."
  789.           DFB 0
  790. WAIT2     ASC "PRINTING  ; PLEASE WAIT...PRESS ESCAPE TO STOP"
  791.           HEX 8D00
  792. WHERE1    ASC "(S)CREEN   (P)RINTER   (D)ISK"
  793.           DFB 0
  794. PROMPT1   ASC "QUIT? (Y/N) "
  795.           DFB 0
  796. PROMPT2   ASC "MUST BE A VALID PATHNAME OR ?"
  797.           HEX 8D8D00
  798. PROMPT3   ASC "ENTER PREFIX OR "
  799.           HEX 8D
  800.           ASC "PRESS RETURN FOR CURRENT PREFIX"
  801.           HEX 8D
  802.           DFB 0
  803. PROMPT4   HEX 8D8D
  804.           ASC "NEW FILE NAME "
  805.           DFB 0
  806. PROMPT5   HEX 8D8D
  807.           ASC "CREATING "
  808.           DFB 0
  809. COMMAND   ASC "CAT"
  810.           HEX 8D00
  811. FTERRL    ASC "MUST BE TEXT FILE "
  812.           DFB 00
  813.